package com.fancy.music.service;

import com.fancy.common.dto.AlbumBasicInfo;
import com.fancy.common.dto.PageResult;
import com.fancy.music.dto.AlbumDetailDTO;
import com.fancy.music.entity.Album;

import java.util.List;

public interface AlbumService {

    /**
     * 根据ID获取专辑详情
     */
    Album getAlbumDetail(Long albumId);

    /**
     * 根据ID获取专辑详情（包含歌手名）
     */
    AlbumDetailDTO getAlbumDetailWithInfo(Long albumId);

    /**
     * 搜索专辑
     */
    PageResult<Album> searchAlbums(String keyword, String genre, String language, int page, int size);

    /**
     * 搜索专辑（包含歌手名）
     */
    PageResult<AlbumDetailDTO> searchAlbumsWithDetails(String keyword, String genre, String language, int page, int size);

    /**
     * 获取热门专辑
     */
    List<Album> getHotAlbums(Integer limit);

    /**
     * 获取热门专辑（包含歌手名）
     */
    List<AlbumDetailDTO> getHotAlbumsWithDetails(Integer limit);

    /**
     * 获取新专辑
     */
    List<Album> getNewAlbums(Integer limit);

    /**
     * 获取新专辑（包含歌手名）
     */
    List<AlbumDetailDTO> getNewAlbumsWithDetails(Integer limit);

    /**
     * 根据歌手ID获取专辑
     */
    List<Album> getAlbumsByArtistId(Long artistId);

    /**
     * 根据歌手ID获取专辑（包含歌手名）
     */
    List<AlbumDetailDTO> getAlbumsByArtistIdWithDetails(Long artistId);

    /**
     * 根据音乐风格获取专辑
     */
    List<Album> getAlbumsByGenre(String genre, Integer limit);

    /**
     * 根据音乐风格获取专辑（包含歌手名）
     */
    List<AlbumDetailDTO> getAlbumsByGenreWithDetails(String genre, Integer limit);

    /**
     * 获取专辑基本信息
     */
    AlbumBasicInfo getAlbumBasicInfo(Long albumId);

    /**
     * 批量获取专辑基本信息
     */
    List<AlbumBasicInfo> getAlbumBasicInfoBatch(List<Long> albumIds);

    /**
     * 创建专辑
     */
    Long createAlbum(Album album);

    /**
     * 更新专辑信息
     */
    boolean updateAlbum(Album album);

    /**
     * 删除专辑
     */
    boolean deleteAlbum(Long albumId);

    /**
     * 启用/禁用专辑
     */
    boolean toggleAlbumStatus(Long albumId, Integer status);

    /**
     * 更新专辑歌曲数量
     */
    void updateTrackCount(Long albumId);

    /**
     * 获取所有专辑的音乐风格
     */
    List<String> getAllAlbumGenres();

    /**
     * 根据音乐风格获取专辑（支持部分匹配）
     */
    List<Album> getAlbumsByGenreMatch(String genre, Integer limit);

    /**
     * 根据音乐风格获取专辑（包含歌手名，支持部分匹配）
     */
    List<AlbumDetailDTO> getAlbumsByGenreMatchWithDetails(String genre, Integer limit);

    /**
     * 管理员搜索专辑（支持状态筛选）
     */
    PageResult<AlbumDetailDTO> searchAlbumsForAdmin(String keyword, String genre, Integer status, int page, int size);
}
